package cn.kwq.project_manger.controller;

import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import cn.kwq.project_manger.common.R;
import cn.kwq.project_manger.common.RES;
import cn.kwq.project_manger.pojo.Project;
import cn.kwq.project_manger.pojo.dto.ResProJDto;
import cn.kwq.project_manger.pojo.dto.ResResumeDto;
import cn.kwq.project_manger.service.DevService;
import cn.kwq.project_manger.service.NoticeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;

@SuppressWarnings("AlibabaCommentsMustBeJavadocFormat")
@Slf4j
@Api(tags ="开发自助接口")
@RestController
@RequestMapping("/dev/login/")
public class DevLoginController {


    @Autowired
    DevService devService;
    @Autowired
    NoticeService noticeService;


    /**
     * 在新增某种角色的时候一定要同时把开发人员添加进去（id为1的角色拥有全部角色）
     * @return
     */
    @ApiOperation("登录开发账户")
    @SaIgnore//可以匿名访问该接口
    @PostMapping("login")
    public RES Login() {
            //建立会话
            StpUtil.login(1);
            log.info("登录开发账户成功");
            SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
            return R.ok(tokenInfo);

    }

    @ApiOperation("获取五个测试号token")
    @SaIgnore//可以匿名访问该接口
    @PostMapping("loginDev")
    public RES LoginList() {
        List<String> tokenMap=new ArrayList<>();
        log.info("获取开发token");
        for ( int i=0;i<5;i++){
            StpUtil.login(12+i);
            SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
            String tokenValue = tokenInfo.getTokenValue();
            tokenMap.add(tokenValue);

        }
        return R.ok(tokenMap);

    }

    @ApiOperation("新建公告(json传 key为content)")
    @PostMapping("newNotice")
    public RES newNotice(@RequestBody Map<String,String> dto) {
        Optional.ofNullable(dto.get("content")).ifPresent(item-> noticeService.saveNotice(item));
        return R.ok("发布完成");
    }
    @ApiOperation("删除公告(json传 key为noticeId")
    @PostMapping("deleteNotice")
    public RES deleteNotice(@RequestBody Map<String,Long> dto) {
        Long noticeId = dto.get("noticeId");

        if (noticeId!=null){
            return R.ok(noticeService.deleteNotice(noticeId));
        }
        return R.ok("删除失败");
    }




    /**
     * 在新增某种角色的时候一定要同时把开发人员添加进去（id为1的角色拥有全部角色）
     * @return
     */
    @ApiOperation("开发账户通过全部项目比赛审核")
    @SaIgnore//可以匿名访问该接口
    @PostMapping("approvedAllProject")
    public RES approvedAllProject() {
        //建立会话
        StpUtil.login(1);
       devService.approvedAllProject();
       log.warn("project全部状态更新成功");
        return R.ok("开发人员通过project审核成功");

    }


    @ApiOperation("开发账户通过全部队伍审核")
    @SaIgnore//可以匿名访问该接口
    @PostMapping("approvedAllTeam")
    public RES approvedAllTeam() {
        //建立会话
        StpUtil.login(1);
        devService.approvedAllTeam();
        log.warn("team全部状态更新成功");
        return R.ok("开发人员通过审核team成功");

    }



    @ApiOperation("用来生成文档数据，请求了没用，后端没有任何逻辑")
    @SaIgnore//可以匿名访问该接口
    @PostMapping("tset")
    public RES test(@RequestBody Project project,
                    @RequestBody ResProJDto resProJDto,
                    @RequestBody ResResumeDto resResumeDto) {

        return R.ok(null);

    }
}
